# -*- coding: utf-8 -*-
# @Author : Hami


from parse.CaseParser import case_parser


class CasesPlugin:
    """
    pytest插件 - 用于pytest运行时的用例配置信息加载
    应用了 pytest 钩子函数
    """

    def pytest_addoption(self, parser):
        """
        增加pytest运行的配置项
        """
        parser.addoption(
            "--type", action="store", default="yaml", help="测试用例类型"
        )
        parser.addoption(
            "--cases", action="store", default="../examples", help="测试用例目录"
        )

    def pytest_generate_tests(self, metafunc):
        """
        method_meta: 运行的方法信息，在执行对应文件之前会先进行执行
        """
        # 读取用户传过来的参数
        case_type = metafunc.config.getoption("type")
        cases_dir = metafunc.config.getoption("cases")

        # 读取测试用例,同时需要进行参数化
        data = case_parser(case_type, cases_dir)

        # 把测试用例作为参数化，交给 runner（核心） 执行器进行运行
        if "caseinfo" in metafunc.fixturenames:
            metafunc.parametrize("caseinfo", data['case_infos'], ids=data['case_names'])